﻿
#include <iostream>
#include "Monster.h"
#include "MonsterStatus.h"
using namespace std;

//各个状态子类的Attacked成员函数实现代码
void MonsterStatus_Feroc::Attacked(int power, Monster* mainobj)
{
	int orglife = mainobj->GetLife(); //暂存怪物血量用于后续比较
	if ((orglife - power) > 400) //怪物原来处于凶悍状态，现在 依然处于凶悍状态
	{
		//状态未变
		mainobj->SetLife(orglife - power); //怪物的剩余血量
		std::cout << "怪物处于凶悍状态中，对主角进行疯狂反击!" << std::endl;
		//.....处理其他动作逻辑比如反击
	}
	else
	{
		//不管下个状态是啥，总之不会是凶悍状态了，只可能是 不安，恐惧，死亡状态之一，先无条件的转到不安状态去（不安状态中会进行再次判断）
		/*delete mainobj->getCurrentState();
		mainobj->setCurrentState(new MonsterStatus_Worr);*/
		mainobj->setCurrentState(MonsterStatus_Worr::getInstance());
		mainobj->getCurrentState()->Attacked(power, mainobj);
	}
}

void MonsterStatus_Worr::Attacked(int power, Monster* mainobj)
{
	int orglife = mainobj->GetLife(); //暂存怪物血量用于后续比较
	if ((orglife - power) > 100) //怪物原来处于不安状态，现在 依然处于不安状态
	{
		//状态未变
		mainobj->SetLife(orglife - power); //怪物的剩余血量
		std::cout << "怪物处于不安状态中，对主角进行反击并呼唤支援!" << std::endl;
		//.....处理其他动作逻辑
	}
	else
	{
		//不管下个状态是啥，总之不会是凶悍、不安 状态了，只可能是 恐惧，死亡状态之一，先无条件的转到恐惧状态去
		/*delete mainobj->getCurrentState();
		mainobj->setCurrentState(new MonsterStatus_Fear);*/
		mainobj->setCurrentState(MonsterStatus_Fear::getInstance());
		mainobj->getCurrentState()->Attacked(power, mainobj);
	}
}

void MonsterStatus_Fear::Attacked(int power, Monster* mainobj)
{
	int orglife = mainobj->GetLife(); //暂存怪物血量用于后续比较
	if ((orglife - power) > 0) //怪物原来处于恐惧状态，现在 依然处于恐惧状态
	{
		//状态未变
		mainobj->SetLife(orglife - power); //怪物的剩余血量
		std::cout << "怪物处于恐惧状态中，处于逃跑之中!" << std::endl;
		//.....处理其他动作逻辑
	}
	else
	{
		//不管下个状态是啥，总之不会是凶悍、不安、恐惧 状态了，只可能是 死亡状态
		/*delete mainobj->getCurrentState();
		mainobj->setCurrentState(new MonsterStatus_Dead);*/
		mainobj->setCurrentState(MonsterStatus_Dead::getInstance());
		mainobj->getCurrentState()->Attacked(power, mainobj);
	}
}

void MonsterStatus_Dead::Attacked(int power, Monster* mainobj)
{
	int orglife = mainobj->GetLife();
	if (orglife > 0)
	{
		//还要把怪物生命值减掉
		mainobj->SetLife(orglife - power); 
		//....
	}
	cout << "怪物死亡！" << endl;
}
